using Mbl.ParameterizedTest.FluentCollectionBuilding.Expectors.IntExpectations;
using Mbl.ParameterizedTest.FluentCollectionBuilding.Expectors.GeneralExpectations;

namespace Mbl.ParameterizedTest.FluentCollectionBuilding.Expectors
{
    public class IntExpector<TIn1, TCollector> : Expector<TIn1, int, TCollector>
        where TCollector : ITestCollector<TIn1, int>
    {
        public IntExpector(TCollector testRowCollector, TestCase<TIn1, int> testCase)
            : base(testRowCollector, testCase)
        {
            
        }

        public Justifier<TIn1, int, TCollector> ExpectGreaterThan(int i)
        {
            return CreateJustifier(new GreaterThanExpectation(i));
        }

        public Justifier<TIn1, int, TCollector> ExpectLessThan(int i)
        {
            return CreateJustifier(new LessThanExpectation(i));
        }
    }    

    public class IntExpector<TIn1, TIn2, TCollector> : Expector<TIn1, TIn2, int, TCollector>
        where TCollector : ITestCollector<TIn1, TIn2, int>
    {
        public IntExpector(TCollector testRowCollector, TestCase<TIn1, TIn2, int> testCase)
            : base(testRowCollector, testCase)
        {
            
        }

        public Justifier<TIn1, TIn2, int, TCollector> ExpectGreaterThan(int i)
        {
            return CreateJustifier(new GreaterThanExpectation(i));
        }

        public Justifier<TIn1, TIn2, int, TCollector> ExpectLessThan(int i)
        {
            return CreateJustifier(new LessThanExpectation(i));
        }
    }    

    public class IntExpector<TIn1, TIn2, TIn3, TCollector> : Expector<TIn1, TIn2, TIn3, int, TCollector>
        where TCollector : ITestCollector<TIn1, TIn2, TIn3, int>
    {
        public IntExpector(TCollector testRowCollector, TestCase<TIn1, TIn2, TIn3, int> testCase)
            : base(testRowCollector, testCase)
        {
            
        }

        public Justifier<TIn1, TIn2, TIn3, int, TCollector> ExpectGreaterThan(int i)
        {
            return CreateJustifier(new GreaterThanExpectation(i));
        }

        public Justifier<TIn1, TIn2, TIn3, int, TCollector> ExpectLessThan(int i)
        {
            return CreateJustifier(new LessThanExpectation(i));
        }
    }    

    public class IntExpector<TIn1, TIn2, TIn3, TIn4, TCollector> : Expector<TIn1, TIn2, TIn3, TIn4, int, TCollector>
        where TCollector : ITestCollector<TIn1, TIn2, TIn3, TIn4, int>
    {
        public IntExpector(TCollector testRowCollector, TestCase<TIn1, TIn2, TIn3, TIn4, int> testCase)
            : base(testRowCollector, testCase)
        {
            
        }

        public Justifier<TIn1, TIn2, TIn3, TIn4, int, TCollector> ExpectGreaterThan(int i)
        {
            return CreateJustifier(new GreaterThanExpectation(i));
        }

        public Justifier<TIn1, TIn2, TIn3, TIn4, int, TCollector> ExpectLessThan(int i)
        {
            return CreateJustifier(new LessThanExpectation(i));
        }
    }    

    public class IntExpector<TIn1, TIn2, TIn3, TIn4, TIn5, TCollector> : Expector<TIn1, TIn2, TIn3, TIn4, TIn5, int, TCollector>
        where TCollector : ITestCollector<TIn1, TIn2, TIn3, TIn4, TIn5, int>
    {
        public IntExpector(TCollector testRowCollector, TestCase<TIn1, TIn2, TIn3, TIn4, TIn5, int> testCase)
            : base(testRowCollector, testCase)
        {
            
        }

        public Justifier<TIn1, TIn2, TIn3, TIn4, TIn5, int, TCollector> ExpectGreaterThan(int i)
        {
            return CreateJustifier(new GreaterThanExpectation(i));
        }

        public Justifier<TIn1, TIn2, TIn3, TIn4, TIn5, int, TCollector> ExpectLessThan(int i)
        {
            return CreateJustifier(new LessThanExpectation(i));
        }
    }    

    public class IntExpector<TIn1, TIn2, TIn3, TIn4, TIn5, TIn6, TCollector> : Expector<TIn1, TIn2, TIn3, TIn4, TIn5, TIn6, int, TCollector>
        where TCollector : ITestCollector<TIn1, TIn2, TIn3, TIn4, TIn5, TIn6, int>
    {
        public IntExpector(TCollector testRowCollector, TestCase<TIn1, TIn2, TIn3, TIn4, TIn5, TIn6, int> testCase)
            : base(testRowCollector, testCase)
        {
            
        }

        public Justifier<TIn1, TIn2, TIn3, TIn4, TIn5, TIn6, int, TCollector> ExpectGreaterThan(int i)
        {
            return CreateJustifier(new GreaterThanExpectation(i));
        }

        public Justifier<TIn1, TIn2, TIn3, TIn4, TIn5, TIn6, int, TCollector> ExpectLessThan(int i)
        {
            return CreateJustifier(new LessThanExpectation(i));
        }
    }    

}